package com.zimmur.app.mocolink.service;

import java.util.List;

import com.zimmur.app.mocolink.domain.apiData.GoodsData;
import com.zimmur.app.mocolink.domain.model.Goods;
import com.zimmur.app.mocolink.domain.model.OrderDetail;
import com.zimmur.app.mocolink.domain.vo.GoodsVo;
import com.zimmur.app.mocolink.domain.param.GoodsParam;
import com.zimmur.app.mocolink.domain.param.GoodsParamForManage;
import com.zimmur.app.mocolink.domain.vo.GoodsDetailVo;
import com.zimmur.app.mocolink.domain.vo.GoodsForManageInfo;
import com.zimmur.app.mocolink.domain.util.PageUtil;
import com.zimmur.app.mocolink.domain.vo.GoodsForManageVo;
import com.zimmur.app.mocolink.domain.vo.GoodsInfo;
import com.zimmur.app.mocolink.domain.vo.GoodsInfoVo;

public interface IGoodsService {
	/**
	 * 根据主键查询商品信息
	 *@Description
	 *@param id
	 *@return 
	 *@author zcx
	 *@Time 2017年10月12日 下午5:23:56
	 */
	Goods selectById(Integer goodsId);

	/**
	* <p>Title: queryGoodsForManage</p>
	* <p>Description: 查询商品信息</p>
	* @param param
	* @return
	*/
	GoodsForManageVo queryGoodsForManage(GoodsParamForManage param);
	
	int update(Goods goods);
	/**
	 * 根据订单明细更新库存数量
	 *@Description
	 *@param details
	 *@param type 1:下单，2支付，3取消订单
	 *@author zcx
	 *@Time 2017年10月16日 上午11:52:28
	 */
	void updateStockQuantity(List<OrderDetail> details,Integer type);
	/**
	 * 查询商品详情
	 *@Description
	 *@param goodsId
	 *@return 
	 *@author zcx
	 *@Time 2017年10月16日 下午8:56:06
	 */
	GoodsVo selectGoodsDetail(Integer goodsId,Integer userId);

	/**
	* <p>Title: changeGoodsStatus</p>
	* <p>Description:变更商品状态 </p>
	* @param goodsId
	* @param status
	* @param userName
	* @return
	*/
	int changeGoodsStatus(Integer goodsId, String status, String userName);

	/**
	* <p>Title: saveGoodsDetailForManage</p>
	* <p>Description:保存商品信息 </p>
	* @param vo
	* @param userName
	* @return
	*/
	int saveGoodsDetailForManage(GoodsDetailVo vo, String userName);
	/**
	 * 条件查询商品信息
	 *@Description
	 *@param goodsParam
	 *@return 
	 *@author zcx
	 *@Time 2017年10月17日 下午2:11:06
	 */
	PageUtil<GoodsInfo> queryGoodsByParam(GoodsParam goodsParam);
	/**
	 * 管理后台查询商品
	 *@Description
	 *@param goodsParam
	 *@return 
	 *@author zcx
	 *@Time 2017年10月19日 上午11:12:39
	 */
	PageUtil<GoodsForManageInfo> queryGoodsByParam(GoodsParamForManage goodsParam);
	
	

	/**
	* <p>Title: queryGoodsInfo</p>
	* <p>Description:查询商品信息 </p>
	 * @param goodsId 
	* @return
	*/
	GoodsInfoVo queryGoodsInfo(Integer goodsId);

	/**
	* <p>Title: updateGoodsDetailForManage</p>
	* <p>Description: 修改商品信息</p>
	* @param vo
	* @param userName
	* @return
	*/
	int updateGoodsDetailForManage(GoodsDetailVo vo, String userName);
	/**
	 * 根据接口返回数据更新商品
	 *@Description
	 *@param datas
	 *@return 
	 *@author zcx
	 *@Time 2017年11月7日 下午4:35:58
	 */
	int savePushData(List<GoodsData> datas);
}
